package com.xu.junit;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;

import static org.junit.Assert.*;

/**
 * Junit执行顺序
 */
@FixMethodOrder(MethodSorters.NAME_ASCENDING)  //执行顺序按方法名字母排序,按照词典排序规则(ASC,从小到大,递增)
//@FixMethodOrder(MethodSorters.DEFAULT) // 由方法名hashcode值进行排序,如果hash值大小一致，则按名字的字典顺序确定,每次测试的执行顺序有可能会所不同。
//@FixMethodOrder(MethodSorters.JVM) //执行顺序为JVM返回的顺序,每次测试的执行顺序有可能会所不同。
public class JUnitStudy2_Sequence {

    /**
     * 执行顺序:
     * 静态初始化块 --> BeforeClass -->
     * 构造函数 --> Before --> Test1 -->After
     * 构造函数 --> Before --> Test2 -->After
     * --> AfterClass
     */

    static {
        System.out.println("静态初始化块");
    }

    public JUnitStudy2_Sequence() {
        System.out.println("构造函数");
    }

    @BeforeClass
    public static void beforeclass1() {
        System.out.println("@BeforeClass");
    }

    @Before
    public void before1() {
        System.out.println("@Before");
    }

    @After
    public void after2() {
        System.out.println("@After");
    }

    @AfterClass
    public static void afterclass1() {
        System.out.println("@AfterClass");
    }

    @Test
    public void test1() {
        System.out.println("@Test1");
    }

    @Test
    public void test2() {
        System.out.println("@Test2");
    }
}
